#include <iostream>
#include <fstream>
#include <string>
#include "bundle.h"

#ifdef USEPACK
int main(int argc, char* argv[])
{
    if(argc != 3) {
        std::cout << "usage:\r\n" << "origin.xxx compressed.xxx\n";
        return -1;
    }

    std::ifstream originFile(argv[1], std::ios::binary);       // 以二进制的方式打开文件

    if(originFile.is_open() == false) {
        std::cerr << "open originFile error\n";
        return -2;
    }

    originFile.seekg(0, std::ios::end);     // 跳转到文件末尾
    size_t fileSz = originFile.tellg();     // 获得文件的大小
    originFile.seekg(0, originFile.beg);    // 跳转到文件开始
    std::string content;
    content.resize(fileSz);
    originFile.read((char*)content.c_str(), fileSz);    // 读取文件数据到conten中
    // 以LZIP方式压缩文件内容
    std::string compressedContent = bundle::pack(bundle::LZIP, content);
    // 打开需要压缩的文件
    std::ofstream compressedFile(argv[2], std::ios::binary);

    if(compressedFile.is_open() == false) {
        std::cerr << "open compressedFile error\n";
        return -2;
    }

    // 将压缩后的数据写入到文件中
    compressedFile.write((char*)compressedContent.c_str(), compressedContent.size());
    originFile.close();
    compressedFile.close();    
    return 0;
}
#else 
int main(int argc, char* argv[])
{
    if(argc != 3) {
        std::cout << "usage:\r\n" << "compressed.xxx origin.xxx\n";
        return -1;
    }

    // 打开被压缩的文件
    std::ifstream compressedFile(argv[1], std::ios::binary);
    
    if(compressedFile.is_open() == false) {
        std::cerr << "open compressedFile error\n";
        return -1;
    }

    // 读取文件的内容
    compressedFile.seekg(0, std::ios::end);
    size_t fileSz = compressedFile.tellg();
    compressedFile.seekg(0, std::ios::beg);
    std::string content(fileSz, '0');
    compressedFile.read((char*)content.c_str(), fileSz);
    // 解压
    std::string unCompressed = bundle::unpack(content);
    
    // 打开需要放置解压后的数据的原始文件
    std::ofstream originFile(argv[2], std::ios::binary);

    if(originFile.is_open() == false) {
        std::cerr << "open originFile error\n";
        return -2;
    }

    // 向文件写内容
    originFile.write(unCompressed.c_str(), unCompressed.size());
    compressedFile.close();
    originFile.close();
    return 0;   
}
#endif